package laboratorioV.grupo21.tp4.ejercicios;

import laboratorioV.grupo21.tp4.deposito.Compartimiento;
import laboratorioV.grupo21.tp4.deposito.Deposito;
import laboratorioV.grupo21.tp4.deposito.Pasillo;

public class Punto3MultiT implements Runnable {
	Deposito deposito;
	public Punto3MultiT(Deposito pDeposito) {
		deposito = pDeposito;
	}
	
	@Override
	public void run() {		
		
		StringBuffer strLista = new StringBuffer();
		strLista.append("*********************************************************\n");
		strLista.append("*              VER UBICACIONES DISPONIBLES              *\n");
		strLista.append("*********************************************************\n");
		
		Compartimiento compartimentoAux;		
		Pasillo pasilloAux;
		StringBuffer strAux = new StringBuffer();
		
		//recorre todos los pasillo 
		for (Integer idPasillo : deposito.getPasillos().keySet()) {
			pasilloAux = deposito.getPasillo(idPasillo);
			strLista.append("*********************************************************\n");
			strLista.append("            PASILLO NUMERO        " + idPasillo + "\n");
			strLista.append("*********************************************************\n");
			//lado derecho
			strLista.append("------------------ LADO DERECHO ------------------\n");
			for (Integer i = 1; i <= pasilloAux.getLadoDer().getCantidadCompartimentosMaxX(); i++) {
				for (Integer j = 1; j < pasilloAux.getLadoDer().getCantidadCompartimentosMaxY(); j++) {
					//compartimentoAux = pasilloAux.getLadoDer().getLadoDeCompartimentos().getElement(i, j);
					compartimentoAux = deposito.getCompartimento(idPasillo,"D",i,j);
					if(compartimentoAux == null){	
						strAux.delete(0, strAux.length());
						strAux.append("FILA ");
						strAux.append(i.toString());
						strAux.append(" -COLUMNA ");
						strAux.append(j.toString());
						strAux.append(" -> DISPONIBLE\n");
						strLista.append(strAux.toString());
					}
					else{
						strAux.delete(0, strAux.length());						
						strAux.append("FILA ");
						strAux.append(i.toString());
						strAux.append(" -COLUMNA ");
						strAux.append(j.toString());
						if(compartimentoAux.getEspaciosDisponibles() == 0 )
							strAux.append(" -> LLENO DE ");
						else{
							strAux.append(" -> DISPONIBLE PARA ");						
							strAux.append(compartimentoAux.getEspaciosDisponibles().toString());
						}
						strAux.append(" PRODUCTOS DEL TIPO ");						
						strAux.append(compartimentoAux.getProducto().getDescripcion() + "\n");
						strLista.append(strAux.toString());						
					}
						
				}
			}			
			//lado izquierdo
			strLista.append("------------------ LADO IZQUIERDO ------------------\n");
			for (Integer i = 1; i <= pasilloAux.getLadoIzq().getCantidadCompartimentosMaxX(); i++) {
				for (Integer j = 1; j < pasilloAux.getLadoIzq().getCantidadCompartimentosMaxY(); j++) {
					//compartimentoAux = pasilloAux.getLadoIzq().getLadoDeCompartimentos().getElement(i, j);
					compartimentoAux = deposito.getCompartimento(idPasillo,"D",i,j);
					if(compartimentoAux == null){	
						strAux.delete(0, strAux.length());
						strAux.append("FILA ");
						strAux.append(i.toString());
						strAux.append(" -COLUMNA ");
						strAux.append(j.toString());
						strAux.append(" -> DISPONIBLE\n");
						strLista.append(strAux.toString());						
					}
					else{
						strAux.delete(0, strAux.length());						
						strAux.append("FILA ");
						strAux.append(i.toString());
						strAux.append(" -COLUMNA ");
						strAux.append(j.toString());
						if(compartimentoAux.getEspaciosDisponibles() == 0 )
							strAux.append(" -> LLENO DE ");
						else{
							strAux.append(" -> DISPONIBLE PARA ");						
							strAux.append(compartimentoAux.getEspaciosDisponibles().toString());
						}
						strAux.append(" PRODUCTOS DEL TIPO ");						
						strAux.append(compartimentoAux.getProducto().getDescripcion() + "\n");
						strLista.append(strAux.toString());						
					}
				}
			}
			
			mostrar(strLista.toString());
		}
	}
	private synchronized void  mostrar(String strMsg) {
		System.out.print(strMsg.toString());		
	}
	
	
}
